{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.python.keras.utils import get_file\n",
    "import gzip\n",
    "import numpy as np\n",
    "import keras\n",
    "from keras.datasets import cifar10\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers import Conv2D, MaxPooling2D\n",
    "import os\n",
    "from keras import applications\n",
    "import cv2\n",
    "import functools\n",
    "from keras.models import load_model\n",
    "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"1\"  # 使用第2个GPU"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据集与代码放在一起即可\n",
    "def load_data():\n",
    "    paths = [\n",
    "        'train-labels-idx1-ubyte.gz', 'train-images-idx3-ubyte.gz',\n",
    "        't10k-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz'\n",
    "    ]\n",
    "\n",
    "    with gzip.open(paths[0], 'rb') as lbpath:\n",
    "        y_train = np.frombuffer(lbpath.read(), np.uint8, offset=8)\n",
    "\n",
    "    with gzip.open(paths[1], 'rb') as imgpath:\n",
    "        x_train = np.frombuffer(\n",
    "            imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28, 1)\n",
    "\n",
    "    with gzip.open(paths[2], 'rb') as lbpath:\n",
    "        y_test = np.frombuffer(lbpath.read(), np.uint8, offset=8)\n",
    "\n",
    "    with gzip.open(paths[3], 'rb') as imgpath:\n",
    "        x_test = np.frombuffer(\n",
    "            imgpath.read(), np.uint8, offset=16).reshape(len(y_test), 28, 28, 1)\n",
    "\n",
    "    return (x_train, y_train), (x_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据与数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    " # read dataset\n",
    "(x_train, y_train), (x_test, y_test) = load_data()\n",
    "batch_size = 32\n",
    "num_classes = 10\n",
    "epochs = 5\n",
    "data_augmentation = True  # 图像增强\n",
    "num_predictions = 20\n",
    "save_dir = os.path.join(os.getcwd(), 'saved_models_transfer_learning')\n",
    "model_name = 'keras_fashion_transfer_learning_trained_model.h5'\n",
    "\n",
    "\n",
    "# Convert class vectors to binary class matrices.  将类别弄成独热编码\n",
    "y_train = keras.utils.to_categorical(y_train, num_classes)\n",
    "y_test = keras.utils.to_categorical(y_test, num_classes)\n",
    "\n",
    "\n",
    "# x_train = x_train.astype('float32')\n",
    "# x_test = x_test.astype('float32')\n",
    "# 由于mist的输入数据维度是(num, 28, 28)，vgg16 需要三维图像,因为扩充一下mnist的最后一维\n",
    "X_train = [cv2.cvtColor(cv2.resize(i, (48, 48)), cv2.COLOR_GRAY2RGB) for i in x_train]\n",
    "X_test = [cv2.cvtColor(cv2.resize(i, (48, 48)), cv2.COLOR_GRAY2RGB) for i in x_test]\n",
    "\n",
    "x_train = np.asarray(X_train)\n",
    "x_test = np.asarray(X_test)\n",
    "\n",
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')\n",
    "\n",
    "x_train /= 255  # 归一化\n",
    "x_test /= 255  # 归一化\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 迁移学习建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(48, 48, 3)\n",
      "Tensor(\"block5_pool_1/MaxPool:0\", shape=(?, 1, 1, 512), dtype=float32)\n"
     ]
    }
   ],
   "source": [
    "# 使用VGG16模型\n",
    "base_model = applications.VGG16(include_top=False, weights='imagenet', input_shape=x_train.shape[1:])  # 第一层需要指出图像的大小\n",
    "\n",
    "# # path to the model weights files.\n",
    "# top_model_weights_path = 'bottleneck_fc_model.h5'\n",
    "print(x_train.shape[1:])\n",
    "model = Sequential()\n",
    "print(base_model.output)\n",
    "model.add(Flatten(input_shape=base_model.output_shape[1:]))\n",
    "model.add(Dense(256, activation='relu'))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(num_classes))\n",
    "model.add(Activation('softmax'))\n",
    "\n",
    "# add the model on top of the convolutional base\n",
    "model = Model(inputs=base_model.input, outputs=model(base_model.output))  # VGG16模型与自己构建的模型合并\n",
    "\n",
    "# 保持VGG16的前15层权值不变，即在训练过程中不训练  \n",
    "for layer in model.layers[:15]:\n",
    "    layer.trainable = False\n",
    "\n",
    "# initiate RMSprop optimizer\n",
    "opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)\n",
    "\n",
    "# Let's train the model using RMSprop\n",
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer=opt,\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using real-time data augmentation.\n",
      "1875\n",
      "1875.0\n",
      "Epoch 1/5\n",
      "1875/1875 [==============================] - 1144s 610ms/step - loss: 0.4936 - acc: 0.8304 - val_loss: 0.3751 - val_acc: 0.8639\n",
      "Epoch 2/5\n",
      "1875/1875 [==============================] - 855s 456ms/step - loss: 0.3874 - acc: 0.8690 - val_loss: 0.3440 - val_acc: 0.8810\n",
      "Epoch 3/5\n",
      "1875/1875 [==============================] - 825s 440ms/step - loss: 0.3633 - acc: 0.8799 - val_loss: 0.3488 - val_acc: 0.8914\n",
      "Epoch 4/5\n",
      "1875/1875 [==============================] - 1563s 834ms/step - loss: 0.3491 - acc: 0.8855 - val_loss: 0.3238 - val_acc: 0.8998\n",
      "Epoch 5/5\n",
      "1875/1875 [==============================] - 1929s 1s/step - loss: 0.3443 - acc: 0.8911 - val_loss: 0.3749 - val_acc: 0.8878\n"
     ]
    }
   ],
   "source": [
    "if not data_augmentation:\n",
    "    print('Not using data augmentation.')\n",
    "    history = model.fit(x_train, y_train,\n",
    "              batch_size=batch_size,\n",
    "              epochs=epochs,\n",
    "              validation_data=(x_test, y_test),\n",
    "              shuffle=True)\n",
    "else:\n",
    "    print('Using real-time data augmentation.')\n",
    "    # This will do preprocessing and realtime data augmentation:\n",
    "    datagen = ImageDataGenerator(\n",
    "        featurewise_center=False,  # set input mean to 0 over the dataset\n",
    "        samplewise_center=False,  # set each sample mean to 0\n",
    "        featurewise_std_normalization=False,  # divide inputs by std of the dataset\n",
    "        samplewise_std_normalization=False,  # divide each input by its std\n",
    "        zca_whitening=False,  # apply ZCA whitening\n",
    "        zca_epsilon=1e-06,  # epsilon for ZCA whitening\n",
    "        rotation_range=0,  # randomly rotate images in the range (degrees, 0 to 180)\n",
    "        # randomly shift images horizontally (fraction of total width)\n",
    "        width_shift_range=0.1,\n",
    "        # randomly shift images vertically (fraction of total height)\n",
    "        height_shift_range=0.1,\n",
    "        shear_range=0.,  # set range for random shear\n",
    "        zoom_range=0.,  # set range for random zoom\n",
    "        channel_shift_range=0.,  # set range for random channel shifts\n",
    "        # set mode for filling points outside the input boundaries\n",
    "        fill_mode='nearest',\n",
    "        cval=0.,  # value used for fill_mode = \"constant\"\n",
    "        horizontal_flip=True,  # randomly flip images\n",
    "        vertical_flip=False,  # randomly flip images\n",
    "        # set rescaling factor (applied before any other transformation)\n",
    "        rescale=None,\n",
    "        # set function that will be applied on each input\n",
    "        preprocessing_function=None,\n",
    "        # image data format, either \"channels_first\" or \"channels_last\"\n",
    "        data_format=None,\n",
    "        # fraction of images reserved for validation (strictly between 0 and 1)\n",
    "        validation_split=0.0)\n",
    "\n",
    "    # Compute quantities required for feature-wise normalization\n",
    "    # (std, mean, and principal components if ZCA whitening is applied).\n",
    "    datagen.fit(x_train)\n",
    "    print(x_train.shape[0]//batch_size)  # 取整\n",
    "    print(x_train.shape[0]/batch_size)  # 保留小数\n",
    "    # Fit the model on the batches generated by datagen.flow().\n",
    "    history = model.fit_generator(datagen.flow(x_train, y_train,  # 按batch_size大小从x,y生成增强数据\n",
    "                                     batch_size=batch_size),  \n",
    "                        # flow_from_directory()从路径生成增强数据,和flow方法相比最大的优点在于不用\n",
    "                        # 一次将所有的数据读入内存当中,这样减小内存压力，这样不会发生OOM\n",
    "                        epochs=epochs,\n",
    "                        steps_per_epoch=x_train.shape[0]//batch_size,\n",
    "                        validation_data=(x_test, y_test),\n",
    "                        workers=10  # 在使用基于进程的线程时，最多需要启动的进程数量。\n",
    "                       )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型可视化与保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_2 (InputLayer)         (None, 48, 48, 3)         0         \n",
      "_________________________________________________________________\n",
      "block1_conv1 (Conv2D)        (None, 48, 48, 64)        1792      \n",
      "_________________________________________________________________\n",
      "block1_conv2 (Conv2D)        (None, 48, 48, 64)        36928     \n",
      "_________________________________________________________________\n",
      "block1_pool (MaxPooling2D)   (None, 24, 24, 64)        0         \n",
      "_________________________________________________________________\n",
      "block2_conv1 (Conv2D)        (None, 24, 24, 128)       73856     \n",
      "_________________________________________________________________\n",
      "block2_conv2 (Conv2D)        (None, 24, 24, 128)       147584    \n",
      "_________________________________________________________________\n",
      "block2_pool (MaxPooling2D)   (None, 12, 12, 128)       0         \n",
      "_________________________________________________________________\n",
      "block3_conv1 (Conv2D)        (None, 12, 12, 256)       295168    \n",
      "_________________________________________________________________\n",
      "block3_conv2 (Conv2D)        (None, 12, 12, 256)       590080    \n",
      "_________________________________________________________________\n",
      "block3_conv3 (Conv2D)        (None, 12, 12, 256)       590080    \n",
      "_________________________________________________________________\n",
      "block3_pool (MaxPooling2D)   (None, 6, 6, 256)         0         \n",
      "_________________________________________________________________\n",
      "block4_conv1 (Conv2D)        (None, 6, 6, 512)         1180160   \n",
      "_________________________________________________________________\n",
      "block4_conv2 (Conv2D)        (None, 6, 6, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "block4_conv3 (Conv2D)        (None, 6, 6, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "block4_pool (MaxPooling2D)   (None, 3, 3, 512)         0         \n",
      "_________________________________________________________________\n",
      "block5_conv1 (Conv2D)        (None, 3, 3, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv2 (Conv2D)        (None, 3, 3, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv3 (Conv2D)        (None, 3, 3, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "block5_pool (MaxPooling2D)   (None, 1, 1, 512)         0         \n",
      "_________________________________________________________________\n",
      "sequential_2 (Sequential)    (None, 10)                133898    \n",
      "=================================================================\n",
      "Total params: 14,848,586\n",
      "Trainable params: 7,213,322\n",
      "Non-trainable params: 7,635,264\n",
      "_________________________________________________________________\n",
      "Saved trained model at /home/student/ChileWang/machine_learning_homework/question_one/saved_models_transfer_learning/keras_fashion_transfer_learning_trained_model.h5 \n"
     ]
    }
   ],
   "source": [
    "model.summary()\n",
    "# Save model and weights\n",
    "if not os.path.isdir(save_dir):\n",
    "    os.makedirs(save_dir)\n",
    "model_path = os.path.join(save_dir, model_name)\n",
    "model.save(model_path)\n",
    "print('Saved trained model at %s ' % model_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练过程可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# 绘制训练 & 验证的准确率值\n",
    "plt.plot(history.history['acc'])\n",
    "plt.plot(history.history['val_acc'])\n",
    "plt.title('Model accuracy')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Valid'], loc='upper left')\n",
    "plt.savefig('tradition_cnn_valid_acc.png')\n",
    "plt.show()\n",
    "\n",
    "# 绘制训练 & 验证的损失值\n",
    "plt.plot(history.history['loss'])\n",
    "plt.plot(history.history['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Valid'], loc='upper left')\n",
    "plt.savefig('tradition_cnn_valid_loss.png')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
